#!/usr/bin/env python3
"""
初始化权限数据
"""
import os
import django

# 设置Django环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'inter_api.settings')
django.setup()

from accounts.models import Permission, RolePermission, User

def create_permissions():
    """创建系统权限"""
    
    permissions_data = [
        # 用户管理模块
        {'name': '查看用户列表', 'codename': 'view_user', 'module': 'user', 'description': '查看系统用户列表'},
        {'name': '创建用户', 'codename': 'add_user', 'module': 'user', 'description': '创建新用户账号'},
        {'name': '编辑用户', 'codename': 'change_user', 'module': 'user', 'description': '编辑用户信息'},
        {'name': '删除用户', 'codename': 'delete_user', 'module': 'user', 'description': '删除用户账号'},
        {'name': '重置密码', 'codename': 'reset_password', 'module': 'user', 'description': '重置用户密码'},
        
        # 学生管理模块
        {'name': '查看学生信息', 'codename': 'view_student', 'module': 'student', 'description': '查看学生基本信息'},
        {'name': '编辑学生信息', 'codename': 'change_student', 'module': 'student', 'description': '编辑学生信息'},
        {'name': '管理学生档案', 'codename': 'manage_student_profile', 'module': 'student', 'description': '管理学生档案'},
        
        # 简历管理模块
        {'name': '查看简历', 'codename': 'view_resume', 'module': 'resume', 'description': '查看学生简历'},
        {'name': '审核简历', 'codename': 'review_resume', 'module': 'resume', 'description': '审核学生简历'},
        {'name': '编辑简历', 'codename': 'change_resume', 'module': 'resume', 'description': '编辑简历内容'},
        {'name': '导出简历', 'codename': 'export_resume', 'module': 'resume', 'description': '导出简历文件'},
        
        # 面试管理模块
        {'name': '查看面试记录', 'codename': 'view_interview', 'module': 'interview', 'description': '查看面试记录'},
        {'name': '安排面试', 'codename': 'schedule_interview', 'module': 'interview', 'description': '安排面试时间'},
        {'name': '管理面试题库', 'codename': 'manage_questions', 'module': 'interview', 'description': '管理面试题库'},
        {'name': '评价面试', 'codename': 'evaluate_interview', 'module': 'interview', 'description': '评价面试结果'},
        
        # 岗位管理模块
        {'name': '查看岗位', 'codename': 'view_job', 'module': 'job', 'description': '查看岗位信息'},
        {'name': '发布岗位', 'codename': 'add_job', 'module': 'job', 'description': '发布新岗位'},
        {'name': '编辑岗位', 'codename': 'change_job', 'module': 'job', 'description': '编辑岗位信息'},
        {'name': '删除岗位', 'codename': 'delete_job', 'module': 'job', 'description': '删除岗位'},
        
        # 通知管理模块
        {'name': '查看通知', 'codename': 'view_notification', 'module': 'notification', 'description': '查看系统通知'},
        {'name': '发送通知', 'codename': 'send_notification', 'module': 'notification', 'description': '发送系统通知'},
        {'name': '管理通知', 'codename': 'manage_notification', 'module': 'notification', 'description': '管理通知设置'},
        
        # 文件管理模块
        {'name': '上传文件', 'codename': 'upload_file', 'module': 'file', 'description': '上传文件'},
        {'name': '下载文件', 'codename': 'download_file', 'module': 'file', 'description': '下载文件'},
        {'name': '删除文件', 'codename': 'delete_file', 'module': 'file', 'description': '删除文件'},
        
        # 系统管理模块
        {'name': '用户管理', 'codename': 'manage_users', 'module': 'system', 'description': '管理系统用户'},
        {'name': '角色权限管理', 'codename': 'manage_permissions', 'module': 'system', 'description': '管理角色权限'},
        {'name': '查看系统日志', 'codename': 'view_logs', 'module': 'system', 'description': '查看系统日志'},
        {'name': '系统设置', 'codename': 'system_settings', 'module': 'system', 'description': '修改系统设置'},
        
        # 审计日志模块
        {'name': '查看审计日志', 'codename': 'view_audit_log', 'module': 'audit', 'description': '查看审计日志'},
        {'name': '导出审计日志', 'codename': 'export_audit_log', 'module': 'audit', 'description': '导出审计日志'},
    ]
    
    created_count = 0
    updated_count = 0

    for perm_data in permissions_data:
        try:
            permission, created = Permission.objects.get_or_create(
                codename=perm_data['codename'],
                defaults=perm_data
            )
            if created:
                created_count += 1
                print(f"创建权限: {permission.name}")
            else:
                # 更新现有权限
                for key, value in perm_data.items():
                    if key != 'codename':
                        setattr(permission, key, value)
                permission.save()
                updated_count += 1
                print(f"更新权限: {permission.name}")
        except Exception as e:
            print(f"处理权限 {perm_data['codename']} 时出错: {str(e)}")

    print(f"权限初始化完成，共创建 {created_count} 个权限，更新 {updated_count} 个权限")

def assign_role_permissions():
    """分配角色权限"""
    
    # 管理员拥有所有权限
    admin_permissions = Permission.objects.all()
    for permission in admin_permissions:
        RolePermission.objects.get_or_create(
            role='admin',
            permission=permission
        )
    print(f"管理员角色分配 {admin_permissions.count()} 个权限")
    
    # 老师权限
    teacher_permission_codes = [
        'view_user', 'view_student', 'change_student', 'manage_student_profile',
        'view_resume', 'review_resume', 'change_resume', 'export_resume',
        'view_interview', 'schedule_interview', 'manage_questions', 'evaluate_interview',
        'view_job', 'add_job', 'change_job',
        'view_notification', 'send_notification',
        'upload_file', 'download_file'
    ]
    
    teacher_count = 0
    for code in teacher_permission_codes:
        try:
            permission = Permission.objects.get(codename=code)
            role_perm, created = RolePermission.objects.get_or_create(
                role='teacher',
                permission=permission
            )
            if created:
                teacher_count += 1
        except Permission.DoesNotExist:
            print(f"权限不存在: {code}")
    
    print(f"老师角色分配 {teacher_count} 个权限")
    
    # 学生权限
    student_permission_codes = [
        'view_student', 'change_student',
        'view_resume', 'change_resume',
        'view_interview',
        'view_job',
        'view_notification',
        'upload_file', 'download_file'
    ]
    
    student_count = 0
    for code in student_permission_codes:
        try:
            permission = Permission.objects.get(codename=code)
            role_perm, created = RolePermission.objects.get_or_create(
                role='student',
                permission=permission
            )
            if created:
                student_count += 1
        except Permission.DoesNotExist:
            print(f"权限不存在: {code}")
    
    print(f"学生角色分配 {student_count} 个权限")

def main():
    """主函数"""
    print("开始初始化权限数据...")
    
    # 创建权限
    create_permissions()
    
    # 分配角色权限
    assign_role_permissions()
    
    print("权限数据初始化完成！")
    
    # 显示统计信息
    total_permissions = Permission.objects.count()
    admin_perms = RolePermission.objects.filter(role='admin').count()
    teacher_perms = RolePermission.objects.filter(role='teacher').count()
    student_perms = RolePermission.objects.filter(role='student').count()
    
    print(f"\n权限统计:")
    print(f"总权限数: {total_permissions}")
    print(f"管理员权限: {admin_perms}")
    print(f"老师权限: {teacher_perms}")
    print(f"学生权限: {student_perms}")

if __name__ == "__main__":
    main()
